#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
using namespace std;
#include"priority_queue.h"

//template<class T,int n>
//class stack {
//public:
//	stack() {
//		cout << "template<class T,int n>" << endl;
//	}
//};
//int main() {
//	stack<int, 10> s;
//	return 0;
//}


//template<class T>
//bool Greater(T t1, T t2) {
//	return t1 > t2;
//}
//
//template<>
//bool Greater<Date*>(Date* p1, Date* p2) {
//	return *p1 > *p2;
//}
//bool Greater(Date* p1, Date* p2) {
//	return *p1 > *p2;
//}
//int main() {
//	Date d1(2023, 10, 1);
//	Date d2(2022, 11, 2);
//	cout << Greater(d1,d2) << endl;
//	Date* p3 = new Date(2023, 10, 1);
//	Date* p4 = new Date(2022, 11, 2);
//	cout << Greater(p3,p4) << endl;
//	return 0;
//}


//template<class T1,class T2>
//class A {
//public:
//	A() {
//		cout << "A<T1,T2>" << endl;
//	}
//private:
//	T1 a1;
//	T2 a2;
//};
//
//template<>
//class A<int,char> {
//public:
//	A() {
//		cout << "A<int,char>" << endl;
//	}
//private:
//	int a1;
//	char a2;
//};
//
//int main() {
//	A<int, int>a1;
//	A<int, char>a2;
//	return 0;
//}

template<class T>
struct Greater {
	bool operator()(T t1, T t2) {
		return t1 > t2;
	}
};
template<class T>
struct Greater<T*> {
	bool operator()(T* t1, T* t2) {
		return *t1 > *t2;
	}
};


struct PDateGreater {
	bool operator()(Date* p1, Date* p2) {
		return *p1 > *p2;
	}
};

//template<class T1>
//class A<T1,int> {
//public:
//	A() {
//		cout << "A<class T1,int T2>" << endl;
//	}
//private:
//	T1 a1;
//	int a2;
//};
#include"add.h"
int main() {
	Add<int>(1, 2);

	/*A<char, char>a1;
	A<char, int>a2;*/

	//jxh::priority_queue<Date*,vector<Date*>, Greater<Date*>> q1 ;
	//q1.push(new Date{ 2022,10,1 });
	//q1.push(new Date{ 2023,10,1 });
	//q1.push(new Date{ 2022,11,1 });
	//q1.push(new Date{ 2022,11,2 });
	//while (!q1.empty()) {
	//	cout << *q1.top() << endl;
	//	q1.pop();
	//}
	//jxh::priority_queue<int*,vector<int*>, Greater<int*>>q1;
	//q1.push(new int(1));
	//q1.push(new int(3));
	//q1.push(new int(5));
	//q1.push(new int(2));
	//while (!q1.empty()) {
	//	cout << *q1.top() << endl;
	//	q1.pop();
	//}
	return 0;
}